package com.cskaoyan.javase._1extends._10final._3variable._3static;

/**
 * final修饰静态成员变量表示一个静态的"常量"
 * 在类的全局仅有一份，所以final修饰静态成员变量，也称之为"全局常量"。
 * 它是一个真正意义上的常量，不会因为创建对象而更改，实际开发中的常量多使用它。
 *
 * 语法：
 * [访问权限修饰符] static final 数据类型 变量名;
 *
 * 全局常量的初始值不能依赖于默认初始化,类加载过程中排除默认初始化,还有:
 *      1.显式赋值
 *      2.静态代码块赋值
 * 以上两种赋值方式,必须选择其一,也只能选择其一
 *
 * 注意：
 *      1.final static 还是 static final 实测下来，都是可以的，根据个人习惯使用即可。
 *      2. final修饰静态成员变量是一个全局常量，不会害怕外界访问和修改。所以在很多时候，它的访问权限修饰符都是public的。
 *      3.如果使用静态代码测试类加载，那么访问类的全局常量，有些场景是不会触发类加载的。（感兴趣自己测试一下，作为锻炼动手能力的小demo）
 *
 *
 * @since 10:18
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(Person.BREED);
        // Person.BREED = "猫";
    }
}

class Person {
    // Variable 'breed' might not have been initialized
    public static final String BREED = "人类";
    final static int NUM;

    static {
        NUM = 200;
        // BREED = "狗";
    }
}